package models

type ApmRequest struct {
	Name              string            `json:"name"`                // 名称
	Description       string            `json:"description"`         // 描述
	TraceDuration     int64             `json:"trace_duration"`      // 数据保存时长，单位天
	SpanDailyCounters uint64            `json:"span_daily_counters"` // 每日上报span数量
	Tags              map[string]string `json:"tags"`                // tags
}

type ApmAgentRequest struct {
	Id        string `json:"id"`        // 实例id
	AgentType string `json:"agentType"` // 上报模式，Skywalking， Jaeger，OpenTelemetry
	Language  string `json:"language"`  // 上报语言，Golang, Java, Python, Node
}

type ApmAgentInfo struct {
	AgentDownloadURL        string `json:"AgentDownloadURL,omitnil" name:"AgentDownloadURL"`               // Agent下载地址
	CollectorURL            string `json:"CollectorURL,omitnil" name:"CollectorURL"`                       // Collector上报地址
	Token                   string `json:"Token,omitnil" name:"Token"`                                     // Token信息
	PublicCollectorURL      string `json:"PublicCollectorURL,omitnil" name:"PublicCollectorURL"`           // 外网上报地址
	InnerCollectorURL       string `json:"InnerCollectorURL,omitnil" name:"InnerCollectorURL"`             // 自研VPC上报地址
	PrivateLinkCollectorURL string `json:"PrivateLinkCollectorURL,omitnil" name:"PrivateLinkCollectorURL"` // 内网上报地址(Private Link上报地址)
}

type ApmResponse struct {
	AmountOfUsedStorage       float64 `json:"AmountOfUsedStorage,omitnil" name:"AmountOfUsedStorage"`             // 存储使用量(MB)
	Name                      string  `json:"Name,omitnil" name:"Name"`                                           // 实例名
	InstanceId                string  `json:"InstanceId,omitnil" name:"InstanceId"`                               // 实例ID
	ServiceCount              int64   `json:"ServiceCount,omitnil" name:"ServiceCount"`                           // 该实例已上报的服务端应用数量
	CountOfReportSpanPerDay   int64   `json:"CountOfReportSpanPerDay,omitnil" name:"CountOfReportSpanPerDay"`     // 日均上报Span数
	AppId                     int64   `json:"AppId,omitnil" name:"AppId"`                                         // AppId信息
	TraceDuration             int64   `json:"TraceDuration,omitnil" name:"TraceDuration"`                         // Trace数据保存时长
	Description               string  `json:"Description,omitnil" name:"Description"`                             // 实例描述信息
	Status                    int64   `json:"Status,omitnil" name:"Status"`                                       // 实例状态
	Region                    string  `json:"Region,omitnil" name:"Region"`                                       // 实例所属地域
	SpanDailyCounters         int64   `json:"SpanDailyCounters,omitnil" name:"SpanDailyCounters"`                 // 实例上报额度
	BillingInstance           int64   `json:"BillingInstance,omitnil" name:"BillingInstance"`                     // 实例是否开通计费
	ErrRateThreshold          int64   `json:"ErrRateThreshold,omitnil" name:"ErrRateThreshold"`                   // 错误率阈值
	SampleRate                int64   `json:"SampleRate,omitnil" name:"SampleRate"`                               // 采样率阈值
	ErrorSample               int64   `json:"ErrorSample,omitnil" name:"ErrorSample"`                             // 是否开启错误采样 0  关 1 开
	SlowRequestSavedThreshold int64   `json:"SlowRequestSavedThreshold,omitnil" name:"SlowRequestSavedThreshold"` // 慢调用保存阈值
	ClientCount               int64   `json:"ClientCount,omitnil" name:"ClientCount"`                             // 该实例已上报的客户端应用数量
	TotalCount                int64   `json:"TotalCount,omitnil" name:"TotalCount"`                               // 该实例已上报的总应用数量
	MetricDuration            int64   `json:"MetricDuration,omitnil" name:"MetricDuration"`                       // Metric数据保存时长
}

type GrafanaRequest struct {
	InstanceName   string `json:"instance_name"`   // 实例名称
	VpcId          string `json:"vpc_id"`          // vpc id
	SubnetId       string `json:"subnet_id"`       // subnet id
	Password       string `json:"password"`        // grafana 管理员密码
	EnableInternet bool   `json:"enable_internet"` // 是否开启公网
}

type GrafanaResponse struct {
	InstanceName       string   `json:"InstanceName,omitnil" name:"InstanceName"`             // 实例名
	InstanceId         string   `json:"InstanceId,omitnil" name:"InstanceId"`                 // 实例 ID
	Region             string   `json:"Region,omitnil" name:"Region"`                         // 地域
	VpcId              string   `json:"VpcId,omitnil" name:"VpcId"`                           // VPC ID
	SubnetIds          []string `json:"SubnetIds,omitnil" name:"SubnetIds"`                   // 子网 ID 数组
	InternetUrl        string   `json:"InternetUrl,omitnil" name:"InternetUrl"`               // Grafana 公网地址
	InternalUrl        string   `json:"InternalUrl,omitnil" name:"InternalUrl"`               // Grafana 内网地址
	CreatedAt          string   `json:"CreatedAt,omitnil" name:"CreatedAt"`                   // 创建时间
	InstanceStatus     int64    `json:"InstanceStatus,omitnil" name:"InstanceStatus"`         // 运行状态（1:正在创建；2:运行中；3:异常；4:重启中；5:停机中； 6:已停机； 7: 已删除）
	Zone               string   `json:"Zone,omitnil" name:"Zone"`                             // 实例的可用区
	InstanceChargeType int64    `json:"InstanceChargeType,omitnil" name:"InstanceChargeType"` // 计费模式（1:包年包月）
	VpcName            string   `json:"VpcName,omitnil" name:"VpcName"`                       // VPC 名称
	SubnetName         string   `json:"SubnetName,omitnil" name:"SubnetName"`                 // 子网名称
	RegionId           int64    `json:"RegionId,omitnil" name:"RegionId"`                     // 地域 ID
	RootUrl            string   `json:"RootUrl,omitnil" name:"RootUrl"`                       // 可访问此实例的完整 URL
	EnableSSO          bool     `json:"EnableSSO,omitnil" name:"EnableSSO"`                   // 是否开启 SSO
	Version            string   `json:"Version,omitnil" name:"Version"`                       // 版本号
	EnableSSOCamCheck  bool     `json:"EnableSSOCamCheck,omitnil" name:"EnableSSOCamCheck"`   // SSO登录时是否开启cam鉴权
}

type PrometheusRequest struct {
	InstanceName      string `json:"instance_name"`       // 实例名称
	VpcId             string `json:"vpc_id"`              // vpc id
	SubnetId          string `json:"subnet_id"`           // subnet id
	DataRetentionTime int64  `json:"data_retention_time"` //数据存储时间（单位天），限制值为15，30，45之一
	Zone              string `json:"zone"`                // 可用区 示例值 ap-guangzhou-1
	GrafanaInstanceId string `json:"grafana_instance_id"` //需要关联的 Grafana 实例	示例值	grafana-xxxx
}

type PrometheusResponse struct {
	InstanceId         string `json:"InstanceId,omitnil" name:"InstanceId"`                 // 实例ID。
	InstanceName       string `json:"InstanceName,omitnil" name:"InstanceName"`             // 实例名称。
	InstanceChargeType int64  `json:"InstanceChargeType,omitnil" name:"InstanceChargeType"` // 实例计费模式。取值范围： 2：包年包月 3：按量
	RegionId           int64  `json:"RegionId,omitnil" name:"RegionId"`                     // 地域 ID
	Zone               string `json:"Zone,omitnil" name:"Zone"`                             // 可用区
	VpcId              string `json:"VpcId,omitnil" name:"VpcId"`                           // VPC ID
	SubnetId           string `json:"SubnetId,omitnil" name:"SubnetId"`                     // 子网 ID
	DataRetentionTime  int64  `json:"DataRetentionTime,omitnil" name:"DataRetentionTime"`   // 存储周期
	InstanceStatus     int64  `json:"InstanceStatus,omitnil" name:"InstanceStatus"`         // 实例业务状态。取值范围： 1：正在创建  2：运行中 3：异常 4：重建中 5：销毁中 6：已停服 8：欠费停服中 9：欠费已停服
	GrafanaURL         string `json:"GrafanaURL,omitnil" name:"GrafanaURL"`                 // Grafana 面板 URL
	CreatedAt          string `json:"CreatedAt,omitnil" name:"CreatedAt"`                   // 创建时间
	EnableGrafana      int64  `json:"EnableGrafana,omitnil" name:"EnableGrafana"`           // 是否开启 Grafana 0：不开启 1：开启
	IPv4Address        string `json:"IPv4Address,omitnil" name:"IPv4Address"`               // 实例IPV4地址
	ExpireTime         string `json:"ExpireTime,omitnil" name:"ExpireTime"`                 // 购买的实例过期时间
	ChargeStatus       int64  `json:"ChargeStatus,omitnil" name:"ChargeStatus"`             // 计费状态 1：正常 2：过期 3：销毁 4：分配中 5：分配失败
	SpecName           string `json:"SpecName,omitnil" name:"SpecName"`                     // 规格名称
	AutoRenewFlag      int64  `json:"AutoRenewFlag,omitnil" name:"AutoRenewFlag"`           // 自动续费标记  0：不自动续费 1：开启自动续费 2：禁止自动续费 -1：无效
	IsNearExpire       int64  `json:"IsNearExpire,omitnil" name:"IsNearExpire"`             // 是否快过期 0：否 1：快过期
	AuthToken          string `json:"AuthToken,omitnil" name:"AuthToken"`                   // 数据写入需要的 Token
	RemoteWrite        string `json:"RemoteWrite,omitnil" name:"RemoteWrite"`               // Prometheus Remote Write 的地址
	ApiRootPath        string `json:"ApiRootPath,omitnil" name:"ApiRootPath"`               // Prometheus HTTP Api 根地址
	ProxyAddress       string `json:"ProxyAddress,omitnil" name:"ProxyAddress"`             // Proxy 的地址
	GrafanaInstanceId  string `json:"GrafanaInstanceId,omitnil" name:"GrafanaInstanceId"`
	AlertRuleLimit     int64  `json:"AlertRuleLimit,omitnil" name:"AlertRuleLimit"`         // 告警规则限制
	RecordingRuleLimit int64  `json:"RecordingRuleLimit,omitnil" name:"RecordingRuleLimit"` // 预聚合规则限制
	MigrationType      int64  `json:"MigrationType,omitnil" name:"MigrationType"`           // 迁移状态，0-不在迁移中，1-迁移中、原实例，2-迁移中、目标实例
}
